<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <!-- コンテナをロード -->
  <script type="text/javascript" src="../src/container.js" ></script>
</head>
<body>
  <div id="stdout"></div>
  <script type="text/javascript">
var stdout = document.getElementById( "stdout" );

// クラス
function Kitten( name ) { this.name = name; }
Kitten.prototype = {
   getName: function () { return this.name; }
};

var c = new container.Container( function( binder ) {

  var builder = binder.bind( Kitten ).to( "mii" ).inject( { "name": "mii" });

  // インターセプタの適用
  builder.intercept(
    function( methodInvocation ) {
        methodInvocation.getMethodName(); // 実行されたメソッド名を取得
        methodInvocation.getThis(); // コンポーネントを取得
        methodInvocation.getArguments()[0] = "foo"; // 引数を取得&変更

        stdout.innerHTML += "intercept!<br/>";

        //　元のメソッドを実行
        return methodInvocation.proceed();
    },
    // インターセプタを適用する関数をcontainer.Matcherで指定する。
    new container.Matcher( /get.*/, /set.*/ ) );

  // インターセプタは複数回設定できる。
  builder.intercept(
    function( methodInvocation ) {
        stdout.innerHTML += "intercept!<br/>";
        return methodInvocation.proceed();
    },
    container.any()); // すべてにマッチする
});

var mii = c.get( "mii" );
var name = mii.getName() + "<br/>";
stdout.innerHTML += name; // mii

  </script>
</body>
</html>